home *** CD-ROM | disk | FTP | other *** search
- { Unit Dataobj - for reading WAV file information }
-
- Unit Dataobj;
-
- Interface
-
- Uses WObjects, WinDos, Wincrt, WinTypes, WinProcs, Strings, MMSystem, BWCC,
- WaveUtil, StrTool;
-
- TYPE
- DirStr = Array[0..128] of Char;
- DirStrP2 = Array[0..130] of Char;
- WAVEDataType = RECORD
- FileName : ARRAY[0..12] OF Char; { WAV file name }
- PathName : DirStr; { Search path }
- CreationDate : LongInt; { File date }
- FileSize : LongInt; { File size }
- FileComment : ARRAY[0..63] OF CHAR; { WAV comments }
- DiskDrive : Char; { Drive letter }
- DiskLabel : ARRAY[0..12] OF CHAR; { LW label }
- SampRate : WORD;
- Channels : BYTE;
- Save2Wave : BYTE; {Flag, whether WAV file should be stored }
- {0 = No, 1 = Yes, 2 = Yes, but not successful yet }
- END;
-
- WAVECriteria = RECORD
- WName : ARRAY[0..12] OF Char; { WAV file name }
- WLabl : Array[0..12] OF CHAR;
- WPath : DirStr;
- WDat : Byte;
- WDay : Array[0..2] OF Char;
- WMon : Array[0..2] OF Char;
- WYear : Array[0..4] OF Char;
- WCon0 : Byte;
- WBase : ARRAY[0..63] OF CHAR; { WAV comments }
- WCon1 : Byte;
- WLim1 : ARRAY[0..63] OF CHAR; { WAV comments }
- WCon2 : Byte;
- WLim2 : ARRAY[0..63] OF CHAR; { WAV comments }
- END;
-
- PWaveData = ^TWaveData;
- TWaveData = OBJECT(TObject)
- WD : WAVEDataType; { A record containing all data record values }
- CONSTRUCTOR Init(WData : WAVEDataType); { Initializes an object instance }
- CONSTRUCTOR Load(VAR S : TStream); { Method for loading instance }
- PROCEDURE Store(VAR S : TStream); { Method for saving instance }
- Procedure GetData(VAR WDL : WaveDataType); { Method for reading data }
- Procedure Write; virtual; { Method for displaying instance }
- DESTRUCTOR Done; virtual; { Removes instance from memory }
- END;
-
- PWaveCollection = ^TWaveCollection;
- TWaveCollection = OBJECT(TSortedCollection)
- function Compare(Key1, Key2: Pointer): Integer; virtual; { Method for comparing two instances }
- end;
-
- CONST
- RWaveData : TStreamRec = ( { Registration of type TWaveData }
- ObjType : 1000;
- VMTLink : Ofs(TypeOf(TWaveData)^);
- Load : @TWaveData.Load;
- Store : @TWaveData.Store
- );
-
- RWaveColl : TStreamRec = ( { Registration of type TWaveCollection }
- ObjType : 1001;
- VMTLink : Ofs(TypeOf(TWaveCollection)^);
- Load : @TWaveCollection.Load;
- Store : @TWaveCollection.Store
- );
-
- RPlayColl : TStreamRec = ( { Registration of type TWaveCollection }
- ObjType : 1002;
- VMTLink : Ofs(TypeOf(TCollection)^);
- Load : @TCollection.Load;
- Store : @TCollection.Store
- );
-
- WildCard = '*.*'; { Wildcard for all files }
- ChooseWild = 'WAV'; { Wildcard for WAV files }
-
-
- C2W_DontSave = 0; {Flags for comments in WAV files}
- C2W_IsSaved = 1;
- C2W_Save = 3;
-
-
- PROCEDURE WD_RegisterStreamTypes;
- PROCEDURE WD_ListAll(Data : PCollection);
- PROCEDURE WD_InsertAll(Data : PCollection; List : PListBox);
- PROCEDURE WD_CopyAll(DataSource, DataDest : PCollection);
- PROCEDURE WD_KillDoubles(VAR GetBack:Integer);
- PROCEDURE WD_SearchAll(HW : HWnd;DataSource, DataDest : PCollection; Criteria : WaveCriteria; VAR CurrCount : Integer);
- FUNCTION WD_Search_NextOne(HW : HWnd;Num : Integer; Item : PWaveData; CRW : WaveCriteria) : Integer;
- FUNCTION WD_SearchNext(HW:HWnd;Num : Integer; Item : PWaveData; CRW : WaveCriteria) : Integer;
- PROCEDURE WD_TMP2DAT;
- Procedure WD_Scan4WorkDir;
- FUNCTION WD_NewShortPath(VAR RPath : DirStr; APath : DirStrP2; MaxLen : Integer) : PChar;
- Function Exists(FileName : PChar):Boolean;
- Procedure WD_NewShortHelp(APath : DirStrP2; MaxLen : Integer);
-
- VAR
- WAVECollect : PWaveCollection; { Variable for Database instance }
- WaveSelectColl : PWaveCollection; { Variable for Select data instance }
- WaveTakeColl : PWaveCollection; { Variable for final selected files }
- WavePlayColl : PCollection; { Variable for Play data instance }
- WaveDummyColl : PWAVECollection;
- WaveStream : PBufStream; { Variable for file stream }
- WAVEDummy : WaveDataType; { Dummy variable for filling data records }
- WaveDCrit : WaveCriteria;
- RootPath : Array[0..fsPathName] of Char;
- RootDir : Array[0..fsDirectory] of Char;
- RootFile : Array[0..fsFileName] of Char;
- RootExt : Array[0..fsExtension] of Char;
- WF_TMP : Array[0..145] of Char;
- WF_DAT : Array[0..145] of Char;
- WF_CAS : Array[0..145] of Char;
- WF_EVE : Array[0..145] of Char;
- DBChanged : Boolean; { Flag, whether database has been changed }
-
- ShortHelp : DirStrP2;
- ShortMain : DirStrP2;
-
- IMPLEMENTATION
-
- VAR
- GlobDum : DirStr;
-
- {---------------------------------------------------------------------------------------------}
-
- { TWaveData }
- CONSTRUCTOR TWaveData.Init(WData : WAVEDataType);
- BEGIN
- WD := WData;
- END;
-
- CONSTRUCTOR TWaveData.Load(VAR S : TStream);
- BEGIN
- S.Read(WD,SizeOf(WD));
- END;
-
- PROCEDURE TWaveData.Store(VAR S : TStream);
- BEGIN
- S.Write(WD,SizeOf(WD));
- END;
-
- PROCEDURE TWaveData.GetData(VAR WDL : WaveDataType);
- BEGIN
- WDL := WD;
- END;
-
- PROCEDURE TWaveData.Write;
- BEGIN
- WriteLn('--------------------------------------------------');
- WriteLn(' Name : ',WD.FileName,', Size : ',WD.FileSize);
- WriteLn(' Disk : ', WD.DiskLabel,' -> ',WD.DiskDrive, ':',WD.PathName);
- WriteLn(' Comm : ', WD.FileComment);
- END;
-
- DESTRUCTOR TWaveData.Done;
- BEGIN
- END;
-
- {----------------------------------------------------------------------------------------------}
- function TWaveCollection.Compare(Key1, Key2: Pointer): Integer;
- { Compare criteria is file name }
- VAR
- PWD1, PWD2 : WaveDataType;
- Check : Integer;
- begin
- PWaveData(Key1)^.GetData(PWD1);
- PWaveData(Key2)^.GetData(PWD2);
-
- IF (StrPas(pwd1.FileName) < StrPas(pwd2.FileName)) THEN Check := -1 Else
- IF (StrPas(pwd1.FileName) > StrPas(pwd2.FileName)) THEN Check := 1 Else
- Check := 0;
- IF (Check = 0) THEN BEGIN
- IF (StrPas(pwd1.PathName) < StrPas(pwd2.PathName)) THEN Check := -1 Else
- IF (StrPas(pwd1.PathName) > StrPas(pwd2.PathName)) THEN Check := 1 Else
- Check := 0;
- END;
-
- IF (Check = 0) THEN BEGIN
- IF (StrPas(pwd1.DiskLabel) < StrPas(pwd2.DiskLabel)) THEN Check := -1 Else
- IF (StrPas(pwd1.DiskLabel) > StrPas(pwd2.DiskLabel)) THEN Check := 1 Else
- Check := 0;
- END;
-
- IF (Check = 0) THEN BEGIN
- IF ((pwd1.DiskDrive) < (pwd2.DiskDrive)) THEN Check := -1 Else
- IF ((pwd1.DiskDrive) > (pwd2.DiskDrive)) THEN Check := 1 Else
- Check := 0;
- END;
-
- IF (Check = 0) THEN BEGIN
- IF ((pwd1.FileSize) < (pwd2.FileSize)) THEN Check := -1 Else
- IF ((pwd1.FileSize) > (pwd2.FileSize)) THEN Check := 1 Else
- Check := 0;
- END;
-
- IF (Check = 0) THEN BEGIN
- IF ((pwd1.CreationDate) < (pwd2.CreationDate)) THEN Check := -1 Else
- IF ((pwd1.CreationDate) > (pwd2.CreationDate)) THEN Check := 1 Else
- Check := 0;
- END;
-
- Compare := Check;
- {Compare := StrComp(PWD1.FileName,PWD1.FileName);}
- end;
- {----------------------------------------------------------------------------------------------}
- PROCEDURE WD_RegisterStreamTypes;
- {
- *** Input : None
- *** Output : None
- *** Remarks : Registers data stream types
- }
- BEGIN
- RegisterType (RWaveData);
- RegisterType (RWaveColl);
- RegisterType (RPlayColl);
- END;
- {----------------------------------------------------------------------------------------------}
- PROCEDURE WD_ListAll(Data : PCollection);
- {
- *** Input : Pointer to collection
- *** Output : None
- *** Remarks : Displays all collection elements on the screen
- }
-
- PROCEDURE List_One(Item : PWaveData); FAR;
- BEGIN
- Item^.Write;
- END;
- BEGIN
- Data^.ForEach(@List_One);
- END;
- {----------------------------------------------------------------------------------------------}
- PROCEDURE WD_InsertAll(Data : PCollection; List : PListBox);
- {
- *** Input : Pointer to collection
- Pointer to list box
- *** Output : None
- *** Remarks : Displays all collection elements in a list box
- }
-
- PROCEDURE Insert_One(Item : PWaveData); FAR;
- BEGIN
- {WriteLn('Tutti Frutti');}
- List^.AddString(Item^.WD.FileName);
- END;
- BEGIN
- Data^.ForEach(@Insert_One);
- {WriteLn('I think, therefore I am broke');}
- END;
- {----------------------------------------------------------------------------------------------}
- PROCEDURE WD_CopyAll(DataSource, DataDest : PCollection);
- {
- *** Input : Pointer to source collection
- Pointer to dest collection
- *** Output : None
- *** Remarks : Copies all collection elements
- }
-
- PROCEDURE Copy_One(Item : PWaveData); FAR;
- BEGIN
- DataDest^.Insert(Item);
- END;
- BEGIN
- DataSource^.ForEach(@Copy_One);
- END;
-
- {----------------------------------------------------------------------------------------------}
- {----------------------------------------------------------------------------------------------}
-
-
- PROCEDURE WD_KillDoubles(VAR GetBack:Integer);
- {
- *** Input : Pointer to source collection
- Pointer to dest collection
- *** Output : None
- *** Remarks : Copies all collection elements
- }
- VAR
- Idx : Integer;
-
- PROCEDURE Count_One(Item : PWaveData); FAR;
- BEGIN
- IF (WaveCollect^.Search(Item,Idx) = True) THEN BEGIN
- END
- ELSE BEGIN
- WaveDummyColl^.Insert(Item);
- Inc(GetBack,1);
- END;
- END;
- BEGIN
- GetBack := 0;
- WaveSelectColl^.ForEach(@Count_One);
- WaveSelectColl^.DeleteAll;
- WD_CopyAll(WaveDummyColl, WaveSelectColl);
- WaveDummyColl^.DeleteAll;
- END;
- (*
- PROCEDURE WD_CountAll(VAR DataSource, DataDest : PWaveCollection; GetBack : Integer);
- {
- *** Input : Pointer to source collection
- Pointer to dest collection
- *** Output : None
- *** Remarks : Copies all collection elements
- }
- VAR
- Idx : Integer;
-
- PROCEDURE Count_One(Item : PWaveData); FAR;
- BEGIN
- Write('Here am I');
- IF (DataDest^.Search(Item,Idx) = True) THEN BEGIN
- Write(', OK, found... ');
- END
- ELSE BEGIN
- WaveDummyColl^.Insert(Item);
- Inc(GetBack,1);
- WriteLn(GetBack);
- END;
- END;
- BEGIN
- GetBack := 0;
- DataSource^.ForEach(@Count_One);
- DataSource^.DeleteAll;
- WD_CopyAll(WaveDummyColl, DataSource);
- WaveDummyColl^.DeleteAll;
- END;
- *)
- {----------------------------------------------------------------------------------------------}
-
- PROCEDURE WD_SearchAll(HW : HWnd;DataSource, DataDest : PCollection; Criteria : WaveCriteria; VAR CurrCount : Integer);
- {
- *** Input : Pointer to source collection
- Pointer to dest collection
- *** Output : None
- *** Remarks : Copies all collection elements
- }
- VAR
- StartCount : Integer;
-
- FUNCTION WD_ScanItem(It : PWaveData; Cr : WaveCriteria) : Boolean;
- VAR
- WD : WaveDataType;
- Test1,
- Test11,
- Test15,
- Test2,
- Test3,
- Test4,
- TestDat : Boolean;
- DateTime : TDateTime;
- DayDum : Array[0..2] OF Char;
- MonDum : Array[0..2] OF Char;
- YearDum : Array[0..4] OF Char;
- Cyear,
- CMon,
- CDay,
- i : Integer;
- DPath : DirStr;
- HelpPChar : Array[0..1] of Char;
- BEGIN
- It^.GetData(WD);
-
-
-
- { Search for entered file name }
- Test1 := (STRCheckSub(Cr.WName, WD.FileName, 0));
- IF Not(Test1) THEN BEGIN
- WD_ScanItem := False;
- Exit;
- END;
-
- {
- WriteLn('-------------------------------------------------------');
- WriteLn(' Crit : ',Cr.WLabl);
- WriteLn(' Labl : ',WD.DiskLabel);
- }
- Test11 := (STRCheckSub(Cr.WLabl, WD.DiskLabel, 0));
- IF Not(Test11) THEN BEGIN
- WD_ScanItem := False;
- Exit;
- END;
-
- { Searched only on one drive??? }
- IF (StrLen(Cr.WPath) = 3) THEN
- IF ((Cr.WPath[1] = ':') AND (WD.DiskDrive <> Cr.WPath[0])) THEN BEGIN
- WD_ScanItem := False;
- Exit;
- END;
-
- { More than three characters entered??? }
- { Then add a path name }
- IF (StrLen(Cr.WPath) >= 3) THEN BEGIN
- IF ((Cr.WPath[1] = ':') AND (WD.DiskDrive <> Cr.WPath[0])) THEN BEGIN
- WD_ScanItem := False;
- Exit;
- END;
- { If you entered a drive, then truncate this }
- IF ((Cr.WPath[1] = ':')) THEN BEGIN
- DPath[0] := #0;
- For i := 2 to Strlen(Cr.WPath) DO BEGIN
- HelpPChar[0] := Cr.WPath[i];
- HelpPChar[1] := #0;
- StrCat(DPath, HelpPChar);
- END;
- Test1 := (STRCheckSub(DPath, WD.PathName, 0));
- END
- { No valid drive entered }
- { Search for entire entry }
- ELSE Test1 := (STRCheckSub(Cr.WPath, WD.PathName, 0));
-
- IF Not(Test1) THEN BEGIN
- WD_ScanItem := False;
- Exit;
- END;
- END;
-
- IF ((StrLen(Cr.WDay) <> 0) OR (StrLen(Cr.WMon) <> 0) OR (StrLen(Cr.WYear) <> 0)) THEN BEGIN
-
- TestDat := False;
-
- Unpacktime(WD.CreationDate, DateTime);
-
- Str(DateTime.Day:2 , DayDum);
- For i := 0 to StrLen(DayDum) DO BEGIN
- IF DayDum[i] = ' ' Then DayDum[i] := '0';
- END;
- Str(DateTime.Month:2, MonDum);
- For i := 0 to StrLen(MonDum) DO BEGIN
- IF MonDum[i] = ' ' Then MonDum[i] := '0';
- END;
- Str(DateTime.Year:4 , YearDum);
- For i := 0 to StrLen(Yeardum) DO BEGIN
- IF YearDum[i] = ' ' Then Yeardum[i] := '0';
- END;
-
- {
- Writeln('--------------------------');
- WriteLn('Year : ',Cr.WYear);
- WriteLn('Day : ',Cr.WDay);
- WriteLn('Month: ',Cr.WMon);
- }
- {
- IF StrComp(Cr.WMon,'00') = 0 THEN StrCopy(Cr.WMon,MonDum);
- IF StrComp(Cr.WDay,'00') = 0 THEN StrCopy(Cr.WDay,DayDum);
- IF StrComp(Cr.WYear,'0000') = 0 THEN StrCopy(Cr.WYear,YearDum);
- }
- IF StrComp(Cr.WDay,'') = 0 THEN BEGIN
- StrCopy(Cr.WDay,DayDum);
- Cr.WDat := 1;
- END;
- IF StrComp(Cr.WMon,'') = 0 THEN BEGIN
- StrCopy(Cr.WMon,MonDum);
- Cr.WDat := 1;
- END;
- IF StrComp(Cr.WYear,'') = 0 THEN BEGIN
- StrCopy(Cr.WYear,YearDum);
- Cr.WDat := 1;
- END;
-
- {
- WriteLn('Year : ',Cr.WYear);
- WriteLn('Month: ',Cr.WMon);
- WriteLn('Day : ',Cr.WDay);
- }
-
- CYear := StrComp(YearDum, Cr.WYear);
- CMon := StrComp(MonDum, Cr.WMon);
- CDay := StrComp(DayDum, Cr.WDay);
-
- Case Cr.WDat OF
- 1 : BEGIN {Exact}
- IF (CYear = 0) THEN
- IF (CMon =0) THEN
- IF (CDay =0) THEN TestDat := True;
- END;
-
- 3 : BEGIN {Newer}
- IF (CYear < 0) Then TestDat := TRUE
- ELSE BEGIN
- IF (CYear = 0) THEN BEGIN
- IF (CMon < 0) THEN TestDat := True
- ELSE BEGIN
- IF (CMon = 0) THEN BEGIN
- IF (CDay < 0) THEN TestDat := True;
- END
- ELSE BEGIN
- TestDat := False; { CMon > 0 }
- END;
- END
- END
- ELSE BEGIN
- TestDat := False; { CYear > 0 }
- END;
- END;
- END;
- 2 : BEGIN {Newer}
- IF (CYear > 0) Then TestDat := TRUE
- ELSE BEGIN
- IF (CYear = 0) THEN BEGIN
- IF (CMon > 0) THEN TestDat := True
- ELSE BEGIN
- IF (CMon = 0) THEN BEGIN
- IF (CDay > 0) THEN TestDat := True;
- END
- ELSE BEGIN
- TestDat := False; { CMon > 0 }
- END;
- END
- END
- ELSE BEGIN
- TestDat := False; { CYear > 0 }
- END;
- END;
- END;
- END;
- {
- IF TestDat = TRUE THEN BEGIN
- WriteLn('---------------------------------------------------------');
- WriteLn('Criteria : ',Cr.WDat);
- WriteLn('Day : ',DayDum,' - searched: ',Cr.WDay,' Compare to: ',CDay);
- WriteLn('Mon : ',MonDum,' - searched: ',Cr.WMon,' Compare to: ',CMon);
- WriteLn('Yr : ',YearDum,' - searched: ',Cr.WYear,' Compare to: ',CYear);
- END;
- }
- END
- ELSE TestDat := True;
-
- IF (TestDat = False) THEN BEGIN
- WD_ScanItem := False;
- Exit;
- END;
-
- Test15 := (STRCheckSub(Cr.WBase, WD.FileComment, Cr.WCon0));
- Test3 := (STRCheckSub(Cr.WLim1, WD.FileComment, Cr.WCon1));
- Test4 := (STRCheckSub(Cr.WLim2, WD.FileComment, Cr.WCon2));
-
-
- IF ((Cr.WCon0 = 0) OR (Cr.WCon0 = 2)) THEN Test2 := (TRUE AND Test15)
- ELSE Test2 := True;
-
- IF (Cr.Wcon1 = 1) THEN BEGIN
- IF (Cr.WCon2 = 1) THEN Test1 := (Test2 OR Test3) OR Test4 {AND OR OR }
- ELSE Test1 := (Test2 OR Test3) AND Test4 {AND OR AND/NOT }
- END
- ELSE BEGIN
- IF (Cr.WCon2 = 1) THEN Test1 := (Test2 AND Test3) OR Test4 { AND AND/NOT OR }
- ELSE Test1 := (Test2 AND Test3) AND Test4; { AND AND/NOT AND/NOT }
- END;
-
- IF Not(Test1) THEN BEGIN
- WD_ScanItem := False;
- Exit;
- END;
- WD_ScanItem := True;
- END;
-
- PROCEDURE Search_One(Item : PWaveData); FAR;
- VAR
- PString : String[7];
- CString : Array[0..7] OF Char;
- BEGIN
- SetDlgItemText(HW, 1300, Item^.WD.FileName);
- SetDlgItemText(HW, 1301, Item^.WD.FileComment);
- IF (WD_ScanItem(Item,Criteria) = TRUE) THEN BEGIN
- DataDest^.Insert(Item);
- Inc(CurrCount);
- Str(CurrCount:5,PString);
- StrPCopy(CString,PString);
- SetDlgItemText(HW, 1303, CString);
- END
- ELSE BEGIN
- END;
- END;
- BEGIN
- StartCount := DataDest^.Count;
- CurrCount := 0;
- DataSource^.ForEach(@Search_One);
- END;
-
- {----------------------------------------------------------------------------------------------}
-
- FUNCTION WD_ScanOneItem(It : PWaveData; Cr : WaveCriteria) : Boolean;
- VAR
- WD : WaveDataType;
- Test1,
- Test11,
- Test15,
- Test2,
- Test3,
- Test4,
- TestDat : Boolean;
- DateTime : TDateTime;
- DayDum : Array[0..2] OF Char;
- MonDum : Array[0..2] OF Char;
- YearDum : Array[0..4] OF Char;
- Cyear,
- CMon,
- CDay,
- i : Integer;
- DPath : DirStr;
- HelpPChar : Array[0..1] of Char;
- BEGIN
- It^.GetData(WD);
-
- { Search for file name }
- Test1 := (STRCheckSub(Cr.WName, WD.FileName, 0));
- IF Not(Test1) THEN BEGIN
- WD_ScanOneItem := False;
- Exit;
- END;
-
- {
- WriteLn('-------------------------------------------------------');
- WriteLn(' Crit : ',Cr.WLabl);
- WriteLn(' Labl : ',WD.DiskLabel);
- }
- Test11 := (STRCheckSub(Cr.WLabl, WD.DiskLabel, 0));
- IF Not(Test11) THEN BEGIN
- WD_ScanOneItem := False;
- Exit;
- END;
-
- { Search only one drive? }
- IF (StrLen(Cr.WPath) = 3) THEN
- IF ((Cr.WPath[1] = ':') AND (WD.DiskDrive <> Cr.WPath[0])) THEN BEGIN
- WD_ScanOneItem := False;
- Exit;
- END;
-
- { More than three characters entered? }
- { Add a path name }
- IF (StrLen(Cr.WPath) >= 3) THEN BEGIN
- IF ((Cr.WPath[1] = ':') AND (WD.DiskDrive <> Cr.WPath[0])) THEN BEGIN
- WD_ScanOneItem := False;
- Exit;
- END;
- { If drive is entered, then truncate }
- IF ((Cr.WPath[1] = ':')) THEN BEGIN
- DPath[0] := #0;
- For i := 2 to Strlen(Cr.WPath) DO BEGIN
- HelpPChar[0] := Cr.WPath[i];
- HelpPChar[1] := #0;
- StrCat(DPath, HelpPChar);
- END;
- Test1 := (STRCheckSub(DPath, WD.PathName, 0));
- END
- { No valid drive entered }
- { Search for entire entry }
- ELSE Test1 := (STRCheckSub(Cr.WPath, WD.PathName, 0));
-
- IF Not(Test1) THEN BEGIN
- WD_ScanOneItem := False;
- Exit;
- END;
- END;
-
- IF ((StrLen(Cr.WDay) <> 0) OR (StrLen(Cr.WMon) <> 0) OR (StrLen(Cr.WYear) <> 0)) THEN BEGIN
-
- TestDat := False;
-
- Unpacktime(WD.CreationDate, DateTime);
-
- Str(DateTime.Day:2 , DayDum);
- For i := 0 to StrLen(DayDum) DO BEGIN
- IF DayDum[i] = ' ' Then DayDum[i] := '0';
- END;
- Str(DateTime.Month:2, MonDum);
- For i := 0 to StrLen(MonDum) DO BEGIN
- IF MonDum[i] = ' ' Then MonDum[i] := '0';
- END;
- Str(DateTime.Year:4 , YearDum);
- For i := 0 to StrLen(Yeardum) DO BEGIN
- IF YearDum[i] = ' ' Then Yeardum[i] := '0';
- END;
-
- IF StrComp(Cr.WDay,'') = 0 THEN BEGIN
- StrCopy(Cr.WDay,DayDum);
- Cr.WDat := 1;
- END;
- IF StrComp(Cr.WMon,'') = 0 THEN BEGIN
- StrCopy(Cr.WMon,MonDum);
- Cr.WDat := 1;
- END;
- IF StrComp(Cr.WYear,'') = 0 THEN BEGIN
- StrCopy(Cr.WYear,YearDum);
- Cr.WDat := 1;
- END;
-
-
- CYear := StrComp(YearDum, Cr.WYear);
- CMon := StrComp(MonDum, Cr.WMon);
- CDay := StrComp(DayDum, Cr.WDay);
-
- Case Cr.WDat OF
- 1 : BEGIN {Exact}
- IF (CYear = 0) THEN
- IF (CMon = 0) THEN
- IF (CDay = 0) THEN TestDat := True;
- END;
-
- 3 : BEGIN {Newer}
- IF (CYear < 0) Then TestDat := TRUE
- ELSE BEGIN
- IF (CYear = 0) THEN BEGIN
- IF (CMon < 0) THEN TestDat := True
- ELSE BEGIN
- IF (CMon = 0) THEN BEGIN
- IF (CDay < 0) THEN TestDat := True;
- END
- ELSE BEGIN
- TestDat := False; { CMon > 0 }
- END;
- END
- END
- ELSE BEGIN
- TestDat := False; { CYear > 0 }
- END;
- END;
- END;
- 2 : BEGIN {Newer}
- IF (CYear > 0) Then TestDat := TRUE
- ELSE BEGIN
- IF (CYear = 0) THEN BEGIN
- IF (CMon > 0) THEN TestDat := True
- ELSE BEGIN
- IF (CMon = 0) THEN BEGIN
- IF (CDay > 0) THEN TestDat := True;
- END
- ELSE BEGIN
- TestDat := False; { CMon > 0 }
- END;
- END
- END
- ELSE BEGIN
- TestDat := False; { CYear > 0 }
- END;
- END;
- END;
- END;
- {
- IF TestDat = TRUE THEN BEGIN
- WriteLn('---------------------------------------------------------');
- WriteLn('Criteria : ',Cr.WDat);
- WriteLn('Mon : ',MonDum,' - searched: ',Cr.WMon,' Compare to: ',CMon);
- WriteLn('Yr : ',YearDum,' - searched: ',Cr.WYear,' Compare to: ',CYear);
- WriteLn('Day : ',DayDum,' - searched: ',Cr.WDay,' Compare to: ',CDay);
- END;
- }
- END
- ELSE TestDat := True;
-
- IF (TestDat = False) THEN BEGIN
- WD_ScanOneItem := False;
- Exit;
- END;
-
- Test15 := (STRCheckSub(Cr.WBase, WD.FileComment, Cr.WCon0));
- Test3 := (STRCheckSub(Cr.WLim1, WD.FileComment, Cr.WCon1));
- Test4 := (STRCheckSub(Cr.WLim2, WD.FileComment, Cr.WCon2));
-
- {
- WriteLn(Cr.WLim2, ' -- ',WD.FileComment);
- WriteLn(Test15,test3,test4);
- }
- IF ((Cr.WCon0 = 0) OR (Cr.WCon0 = 2)) THEN Test2 := (TRUE AND Test15)
- ELSE Test2 := True;
-
- IF (Cr.Wcon1 = 1) THEN BEGIN
- IF (Cr.WCon2 = 1) THEN Test1 := (Test2 OR Test3) OR Test4 {AND OR OR }
- ELSE Test1 := (Test2 OR Test3) AND Test4 {AND OR AND/NOT }
- END
- ELSE BEGIN
- IF (Cr.WCon2 = 1) THEN Test1 := (Test2 AND Test3) OR Test4 { AND AND/NOT OR }
- ELSE Test1 := (Test2 AND Test3) AND Test4; { AND AND/NOT AND/NOT }
- END;
-
- IF Not(Test1) THEN BEGIN
- WD_ScanOneItem := False;
- Exit;
- END;
- WD_ScanOneItem := True;
- END;
-
-
- FUNCTION WD_SearchNext(HW:HWnd;Num : Integer; Item : PWaveData; CRW : WaveCriteria) : Integer;
- VAR
- PString : String[7];
- CString : Array[0..7] OF Char;
- BEGIN
- SetDlgItemText(HW, 1300, Item^.WD.FileName);
- SetDlgItemText(HW, 1301, Item^.WD.FileComment);
- IF (WD_ScanOneItem(Item,CRW) = TRUE) THEN BEGIN
- WD_SearchNext := Num;
- END
- ELSE BEGIN
- WD_SearchNext := -1;
- END;
- END;
-
- FUNCTION WD_Search_NextOne(HW : HWnd;Num : Integer; Item : PWaveData; CRW : WaveCriteria) : Integer;
- VAR
- PString : String[7];
- CString : Array[0..7] OF Char;
- BEGIN
- SetDlgItemText(HW, 1300, Item^.WD.FileName);
- SetDlgItemText(HW, 1301, Item^.WD.FileComment);
- IF (WD_ScanOneItem(Item,CRW) = TRUE) THEN BEGIN
- WD_Search_NextOne := Num;
- END
- ELSE BEGIN
- WD_Search_NextOne := -1;
- END;
- END;
-
- {----------------------------------------------------------------------------------------------}
- procedure WD_InitAll;
- BEGIN
- WaveCollect := New(PWaveCollection, Init(20,5));
- WaveStream := New ( PBufStream);
- Wavestream^.Init('WaveDeck.Dat', stOpen, 512);
- WriteLn('Read stream in collection');
- WriteLn('Status : ',WaveStream^.Status);
- IF (WaveStream^.Status = stOK) THEN WaveCollect := PWaveCollection(WaveStream^.Get)
- ELSE
- IF (WaveStream^.Status <> stOK) THEN BEGIN
- WriteLn('!!!!!!!!!!!!!!!! No stream found !!!!!!!!!!!!!');
- IF (WaveStream^.Status = stInitError) THEN BEGIN
- Writeln('Creating new stream ');
- WaveStream^.Reset;
- Dispose(WaveStream,Done);
- WaveStream := New ( PBufStream, Init('WaveDeck.Dat', stCreate, 512));
- END
- ELSE BEGIN
- MessageBox(0, 'Error loading stream.','Application Error', mb_Ok);
- END;
- END;
- END;
-
- Function Exists(FileName : PChar):Boolean;
- VAR F : File;
- BEGIN
- {$I-}
- Assign(F,FileName);
- Reset(f);
- Close(f);
- {$I+}
- if IOResult = 0 then Exists := True else Exists := False;
- END;
-
- Procedure WD_TMP2DAT;
- VAR
- F:File;
- BEGIN
- if exists(WF_TMP) THEN BEGIN
- IF exists(WF_DAT) THEN BEGIN
- Assign(f,WF_DAT);
- Erase(f);
- Assign(f,WF_TMP);
- Rename(f,WF_DAT);
- END
- ELSE BEGIN
- Assign(f,WF_TMP);
- Rename(f,WF_DAT);
- END;
- END;
- END;
-
- Procedure WD_Scan4WorkDir;
- BEGIN
- { Read basic directory for program bootup }
- StrPCopy(RootPath,Paramstr(0));
- filesplit(RootPath, RootDir, RootFile, RootExt);
- { Declare variable for TMP files }
- StrCopy(WF_TMP, RootDir);
- StrCat(WF_TMP,'WSW.TMP');
- { Declare variable for DAT file }
- StrCopy(WF_DAT, RootDir);
- StrCat(WF_DAT,'WSW.DAT');
- { Declare variable for CAS file }
- StrCopy(WF_CAS, RootDir);
- StrCat(WF_CAS,'WSWCAS.DAT');
- { Variable for Event file }
- StrCopy(WF_EVE, RootDir);
- StrCat(WF_EVE,'WSWEVENT.DAT');
-
- {
- WriteLn('WAV file : ',WF_DAT);
- WriteLn('WAV temp : ',WF_TMP);
- WriteLn('Root DIR : ',RootDir);
- }
- END;
-
- FUNCTION WD_NewShortPath(VAR RPath : DirStr; APath : DirStrP2; MaxLen : Integer) : PChar;
- VAR
- Count : Integer;
- Slash1 : Integer;
- Slash2 : Integer;
- Slash3 : Integer;
- Slash4 : Integer;
- NPath : DirStr;
- { RPath : DirStr;}
- BPath : DirStr;
- RLen : Integer;
- BEGIN
- WriteLn('Apath:',APath);
- WriteLn('Max :',MaxLen);
- IF StrLen(APath) < MaxLen THEN BEGIN
- WD_NewShortPath := APath;
- Exit;
- END;
- IF StrLen(APath) <=3 THEN BEGIN
- WD_NewShortPath := APath;
- Exit;
- END;
- Slash1 := -1;
- Slash2 := -1;
- Slash3 := -1;
- Slash4 := -1;
- {WriteLn('APath : ',APath);}
- For Count := 0 to SizeOf(DirStr) DO RPath[Count] := #0;
- WriteLn('Rpath:', RPath);
- For Count := 0 to StrLen(APath) DO BEGIN
- {
- Write('Apath : ',APath[Count]);
- WriteLn('--->', StrLen(APath),' :');
- }
- IF ((APath[Count] = '\') and (Slash1 = -1)) THEN Slash1 := Count;
- IF ((APath[Count] = '\') and (Slash2 = -1) and (Slash1 <> -1)) THEN BEGIN
- Slash2 := Count;
- END;
- end;
- For Count := StrLen(APath)-1 Downto 0 DO BEGIN
- {Writeln('Apath back: ',APath[Count]);}
- IF ((APath[Count] = '\') and (Slash3 = -1)) THEN BEGIN
- Slash3 := Count;
- {Count := 0;}
- END;
- end;
- StrLCopy(RPath,APath,Slash2);
- StrCat(RPath,'...');
- FOR Count := Slash3 to StrLen(APath) do StrCat(RPath, PChar(APath[Count]));
- WD_NewShortPath := RPath;
-
- WriteLn(Apath,' -> ', RPath);
-
- END;
-
- Procedure WD_NewShortHelp(APath : DirStrP2; MaxLen : Integer);
- VAR
- Count : Integer;
- Slash1 : Integer;
- Slash2 : Integer;
- Slash3 : Integer;
- Slash4 : Integer;
- NPath : DirStr;
- { ShortHelp : DirStr;}
- BPath : DirStr;
- RLen : Integer;
- HelpPChar : Array[0..1] of Char;
- BEGIN
- IF StrLen(APath) < MaxLen THEN BEGIN
- StrLCopy(ShortHelp,APath,SizeOf(ShortHelp));
- Exit;
- END;
- IF StrLen(APath) <=3 THEN BEGIN
- StrLCopy(ShortHelp,APath,SizeOf(ShortHelp));
- Exit;
- END;
- Slash1 := -1;
- Slash2 := -1;
- Slash3 := -1;
- Slash4 := -1;
- {WriteLn('APath : ',APath);}
- For Count := 0 to SizeOf(DirStr) DO ShortHelp[Count] := #0;
- For Count := 0 to StrLen(APath) DO BEGIN
- {
- Write('Apath : ',APath[Count]);
- WriteLn('--->', StrLen(APath),' :');
- }
- IF ((APath[Count] = '\') and (Slash2 = -1) and (Slash1 <> -1)) THEN Slash2 := Count
- Else
- IF ((APath[Count] = '\') and (Slash1 = -1)) THEN Slash1 := Count;
- end;
- IF ((Slash2 = -1)) THEN Slash2 := StrLen(Apath);
- StrLCopy(ShortHelp,APath,Slash2+1);
- StrCat(ShortHelp,'...');
- For Count := StrLen(APath)-1-(MaxLen-StrLen(ShortHelp)-10) Downto 0 DO BEGIN
- {
- IF ((APath[Count] = '\') and (Slash3= -1) and (Slash4 <> -1)) THEN Slash3 := Count
- else
- }
- IF ((APath[Count] = '\') and (Slash4 = -1)) THEN Slash4 := Count;
- end;
- IF ((Slash3 =-1)) THEN Slash3 := Slash4;
- IF ((Slash3 < Slash2)) THEN Slash3 := Slash2;
- FOR Count := Slash3 to StrLen(APath) do BEGIN
- HelpPChar[0] := APath[Count];
- HelpPChar[1] := #0;
- StrCat(ShortHelp, HelpPChar);
- end;
- END;
-
- BEGIN
- { Automatic registration of stream types }
- WD_RegisterStreamTypes;
- WaveCollect := New(PWaveCollection, Init(20,5));
- WaveDummyColl := New(PWaveCollection, Init(20,5));
- WaveCollect^.Duplicates := FALSE;
- WavePlayColl := New(PCollection, Init(20,5));
-
- WD_Scan4WorkDir;
-
- IF Exists(WF_DAT) THEN BEGIN
- WaveStream := New ( PBufStream, Init(WF_DAT, stOpen, 512));
- WaveCollect := PWaveCollection(WaveStream^.Get);
-
- Dispose(WaveStream,Done);
- END
- ELSE BEGIN
- StrCopy(ShortMain,'Database not found - creating new database file.');
- BWCCMessageBox(0,ShortMain ,'Wicked Sounds for Windows: Note', mb_Ok+ mb_IconAsterisk);
- END;
-
- IF Exists(WF_CAS) THEN BEGIN
- WaveStream := New ( PBufStream, Init(WF_CAS, stOpen, 512));
- WavePlayColl := PCollection(WaveStream^.Get);
- Dispose(WaveStream,Done);
- END
- END.
-